05.Dockerfile
Dockerfile
什么是 Dockerfile?
Dockerfile 就是一个文本文件,其中包含一个个的指令 (Instruction),用指令来说明要执行什么操作来构建 image。每一个指令都会形成一层 Layer。
| 指令 | 说明 | 示例 |
|---|---|---|
FROM |
指定基础镜像 | FROM centos:6 |
ENV |
设置环境变量,可在后面指令使用 | ENV key value |
COPY |
拷贝本地文件到镜像的指定目录 | COPY ./mysql-5.7.rpm /tmp |
RUN |
执行 Linux 的 shell 命令,一般是安装过程的命令 | RUN yum install gcc |
EXPOSE |
指定容器运行时监听的端口,是给镜像使用者看的 | EXPOSE 8080 |
Entrypoint是 |
镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar |
docker build
docker build 是 Docker 中用于从 Dockerfile 构建镜像的命令。通过此命令,你可以根据 Dockerfile 文件中的指令来自动化构建一个镜像。
基本语法
docker build [OPTIONS] PATH | URL | -
- PATH: 构建上下文的路径。通常是一个包含
Dockerfile的目录。如果你在当前目录下构建,可以使用.来代表当前目录。 - URL: 你也可以提供一个 Git 仓库 URL 来作为构建上下文。
- -: 通过标准输入接收构建上下文。
常用选项
-t, --tag
给构建的镜像指定一个标签(名称:版本)。标签用于标识构建的镜像。
docker build -t myimage:v1 .
-f, --file
指定 Dockerfile 的路径。如果你的 Dockerfile 不在当前目录或文件名不是 Dockerfile,可以使用此选项。
docker build -f /path/to/Dockerfile .
--no-cache
禁用缓存。默认情况下,Docker 会缓存中间层(层级缓存),以便在下次构建时加快构建过程。如果你不希望使用缓存,可以添加此选项。
docker build --no-cache -t myimage:v1 .
--build-arg
定义构建时的环境变量(构建参数)。可以在 Dockerfile 中使用 ARG 指令引用。
docker build --build-arg MY_ARG=value -t myimage:v1 .
--pull强制从远程仓库拉取基础镜像,即使本地已有该镜像的最新版本。
docker build --pull -t myimage:v1 .
--rm构建完成后删除中间容器(默认是启用的)。如果你希望保留中间容器(用于调试等目的),可以使用--rm=false。
docker build --rm=false -t myimage:v1 .
-q, --quiet以安静模式构建镜像,只输出镜像的 ID。
docker build -q -t myimage:v1 .
示例
- 最简单的构建命令: 假设你在当前目录下有一个
Dockerfile,执行以下命令来构建一个标签为myapp:latest的镜像:
docker build -t myapp:latest .
- 指定
Dockerfile路径和构建参数: 如果Dockerfile不在当前目录或者文件名不是默认的Dockerfile,你可以使用-f选项指定文件路径,并通过--build-arg传递构建参数:
docker build -f /path/to/Dockerfile --build-arg VERSION=1.0 -t myapp:1.0 .
- 使用缓存和禁用缓存: 默认情况下,Docker 会使用缓存来加速构建。如果你希望构建过程中不使用缓存,可以添加
--no-cache:
docker build --no-cache -t myapp:v2 .
案例
基于 Ubuntu 镜像构建一个新的 image,运行一个 FCMHttpV1 项目
- 准备文件:

- Dockerfile
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK安装目录
ENV JAVA_DIR=/usr/local
# 拷贝JDK和Spring Boot包
COPY ./jdk-17.0.12_linux-x64_bin.tar.gz $JAVA_DIR/
COPY ./FCMHttpV1.jar /tmp/app.jar
# 安装JDK
RUN cd ${JAVA_DIR} \
&& tar -xf ./jdk-17.0.12_linux-x64_bin.tar.gz \
&& mv ./jdk-17.0.12 ./java17/
# 配置环境变量
ENV JAVA_HOME=${JAVA_DIR}/java17
ENV PATH=$PATH:${JAVA_HOME}/bin
# 暴露端口
EXPOSE 11111
# 入口
ENTRYPOINT java -jar /tmp/app.jar
- 构建
# 构建
docker build -t javaweb:1.0 .

查看 image :
docker images

添加防火墙规则:
# 放行11111端口
firewall-cmd --zone=public --add-port=11111/tcp --permanent
# 查看所有打开的端口
firewall-cmd --zone=public --list-ports
运行:
docker run --name fcm -p 11111:11111 -d javaweb:1.0